
// router.js文件
const express = require('express')
const router = express.Router()
const createError = require('http-errors')
const passport = require('passport')
const User = require('./mongoose')

// 注册处理
router.route('/signup')
    .post((req, res, next) => {
        console.log(req.body)
        // register（Model, password, callback(err, data)）方法是passport-local-mongoose插件新增的用户注册方法，代替了数据库查询新增等验证操作，简化了代码
        User.register(new User({ username: req.body.username }), req.body.password, (err, user) => {
            // 数据库如果有同名，就返回错误
            if (err) next(createError(403, '用户名已存在！'))
            else res.json({ user, msg: '注册成功!' })
        })
    })

// 使用passport验证简化了登录，只有正确才能进入回调函数，登录获取数据并保存在session，也是唯一的途径。
// passport.authenticate('local')默认会保存数据在session中，之后的验证只要使用自己封装的verifyUser函数验证session就行了，不需要再次调用passport.authenticate('local')。
router.route('/login')
    .post(passport.authenticate('local'), (req, res) => {
        res.json({ user: req.user, msg: '登录成功!' })
    })

// 因为是基于session控制，所以只要删除session，就没有登录状态了。
router.route('/logout')
    .get((req, res) => {
        req.session.destroy()
        res.end('退出成功!')
    })

module.exports = router